# # class Maze(object):
# #     def __init__(self, mazeFileName):
# #         rowsInMaze = 0
# #         columnsInMaze = 0
# #         self.mazeList = []
# #         mazeFile = open(mazeFileName, 'r')
# #         rowsInMaze = 0
# #         for line in mazeFile:
# #             rowList = []
# #             col = 0
# #             for ch in line[:-1]:
# #                 rowList.append(ch)
# #                 if ch == "S":
# #                     self.startRow = rowsInMaze
# #                     self.startCol = col
# #                 col = col + 1
# #             rowsInMaze = rowsInMaze + 1
# #             self.mazeList.append(rowList)
# #             columnsInMaze = len(rowList)
# #
# #
# # def searchFrom(maze, startRow, startColumn):
# #     maze.updataPosition(startRow, startColumn)
# #     if maze[startRow][startColumn] = OBSTALE:
# #         return False
# #     if maze[startRow][startColumn] = TRIED or maze[startRow][startColumn] == DEAD_END:
# #         return False
# #     if maze.isExit(startRow, startColumn):
# #         maze.updataPosition(startRow, startColumn, PART_OF_PATH)
# #         return True
# #     maze.updataPosition(startRow, startColumn, TRIED)
# #
# #     found = searchFrom(maze, startRow + 1, startColumn) or \
# #             searchFrom(maze, startRow - 1, startColumn) or \
# #             searchFrom(maze, startRow, startColumn + 1) or \
# #             searchFrom(maze, startRow, startColumn - 1)
# #
# #     if found:
# #         maze.updataPosition(startRow, startRow, PART_OF_PATH)
# #     else:
# #         maze.updataPosition(startRow, startColumn, DEAD_END)
# #     return found
#
# ++++++++++++++++++++++
# +   +   ++ ++        +
#       +     ++++++++++
# + +    ++  ++++ +++ ++
# + +   + + ++    ++   +
# +          ++  ++  + +
# +++++ + +      ++  + +
# +++++ +++  + +  ++   +
# +          + + S+ +  +
# +++++ +  + + +     + +
# ++++++++++++++++++++++
